home *** CD-ROM | disk | FTP | other *** search
-
- /*
- memobj.c
- Test access to C fields in a memory object.
- */
-
- #include "SXextend.h"
- #include <string.h>
-
- typedef struct mystruct {
- SXchar ch;
- SXshort sh;
- SXint in;
- SXdouble db;
- SXchar nc[10];
- SXchar *st;
- } mystruct;
-
- static SXchar buffer[128];
- static SXchar scratch[] = "Scratch";
- #define SYSMOD NULL
-
- SXobject defStruct()
- {
- SXobject mem;
- mystruct *mp;
-
- mem = SXextMakeMemoryObject(sizeof(mystruct),
- EXT_ELEMENT("ch", EXT_TYPE_SXCHAR, mystruct, ch),
- EXT_ELEMENT("sh", EXT_TYPE_SXSHORT, mystruct, sh),
- EXT_ELEMENT("in", EXT_TYPE_SXINT, mystruct, in),
- EXT_ELEMENT("db", EXT_TYPE_SXDOUBLE, mystruct, db),
- EXT_ELEMENT("nc", EXT_TYPE_SXN_CHAR, mystruct, nc),
- EXT_ELEMENT("st", EXT_TYPE_SXCHAR_STAR, mystruct, st),
- NULL);
- SXlockMem(mem);
- mp = SXdereference(mem);
- mp->st = buffer;
- SXunlockMem(mem);
- SXextMakeGlobal(scratch, "mem", mem);
- return SXundefined;
- }
-
- SXobject fillStruct()
- {
- SXobject mem;
- mystruct *mp;
-
- mem = SXextGetGlobal(scratch, "mem");
- SXlockMem(mem);
- mp = SXdereference(mem);
- mp->ch = 'I';
- mp->sh = 500;
- mp->in = 128000;
- mp->db = 3.14;
- strcpy(mp->nc, "foo");
- strcpy(buffer, "This is a test.");
- SXunlockMem(mem);
- return SXundefined;
- }
-
- void crlf()
- {
- SXwriteString(debug, "\n");
- }
-
- SXobject dumpStruct()
- {
- SXobject mem;
- mystruct *mp;
- SXchar localbuf[8];
-
- mem = SXextGetGlobal(scratch, "mem");
- SXlockMem(mem);
- mp = SXdereference(mem);
- localbuf[0] = mp->ch;
- localbuf[1] = '\0';
- SXwriteString(debug, localbuf); crlf();
- SXextCall(SYSMOD, "print", SXintToObject(mp->sh), debug, NULL);
- SXextCall(SYSMOD, "print", SXintToObject(mp->in), debug, NULL);
- SXextCall(SYSMOD, "print", SXdoubleToObject(mp->db), debug, NULL);
- SXwriteString(debug, mp->nc); crlf();
- SXwriteString(debug, buffer); crlf();
- SXunlockMem(mem);
- return SXundefined;
- }
-
- SXobject entryPoint(SXobject ld, SXobject grp, SXobject uni)
- {
- SXextMakeFunction(scratch, "fillStruct", fillStruct, 0, 0);
- SXextMakeFunction(scratch, "dumpStruct",dumpStruct, 0, 0);
- defStruct();
- return trueObject;
- }
-